﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

//给你一个数组，将数组中的元素向右轮转 k 个位置，其中 k 是非负数。
//示例 1:
//
//输入: nums = [1, 2, 3, 4, 5, 6, 7], k = 3
//输出 : [5, 6, 7, 1, 2, 3, 4]
//解释 :
//	向右轮转 1 步 : [7, 1, 2, 3, 4, 5, 6]
//	向右轮转 2 步 : [6, 7, 1, 2, 3, 4, 5]
//	向右轮转 3 步 : [5, 6, 7, 1, 2, 3, 4]
//	示例 2 :
//
//	输入：nums = [-1, -100, 3, 99], k = 2
//	输出：[3, 99, -1, -100]
//	解释 :
//	向右轮转 1 步 : [99, -1, -100, 3]
//	向右轮转 2 步 : [3, 99, -1, -100]

void reverse(int* nums, int begin, int end)
{
    while (begin < end)
    {
        int tem = nums[begin];
        nums[begin] = nums[end];
        nums[end] = tem;
        begin++;
        end--;
    }
}
void rotate(int* nums, int numsSize, int k) {
    if (k >= numsSize)
    {
        k %= numsSize;
    }
    reverse(nums, 0, numsSize - k - 1);
    reverse(nums, numsSize - k, numsSize - 1);
    reverse(nums, 0, numsSize - 1);
}


//数组nums包含从0到n的所有整数，但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗？
//
//注意：本题相对书上原题稍作改动
//
//示例 1：
//
//输入：[3, 0, 1]
//输出：2
//
//
//示例 2：
//
//输入：[9, 6, 4, 2, 3, 5, 7, 0, 1]
//输出：8

int missingNumber(int* nums, int numsSize) 
{
    int trueSum = (numsSize) * (numsSize + 1) / 2;
    int sum = 0;
    for (int i = 0; i < numsSize; i++)
    {
        sum += nums[i];
    }
    return trueSum - sum;

}